<?php
/**
 * File: CheckController.class.php
 * Author: camy <375766145@qq.com>
 * Time: 2018/3/24 10:06
 */

namespace Home\Controller;

use Common\Service\Check;

/**
 * 审核管理
 * @package Home\Controller
 */
class CheckController extends BaseController
{
    /**
     * ！审核列表页面
     * @desc page-get
     * @param int $type 列表类型|yes|1-我发起的，2-我审批的
     * @param int $check_type 审核类型|no|默认所有，10-预计积分申请，11-实际积分申请，12-项目附件，20-合同创建，21-合同支付，30-入库单创建，40-积分提现
     * @param int $status 状态|no|0-待审核，1-通过，3-不通过
     * @return int list[].status 状态:0-待审核，1-通过，3-不通过
     * @return string list[].title 审核标题
     * @return string list[].user_name 申请人名字
     * @return string list[].created_at 申请时间
     * @return string list[].callback 跳转地址
     * @return
     */
    public function index($type, $check_type = null, $status = null)
    {

    }

    /**
     * 项目积分申请接口
     * @desc ajax-post
     * @param int $project_id 项目id|yes
     * @param int $type 积分类型|yes|0-预计积分，1-实际积分
     * @param float $points 申请积分数|yes
     * @param int $deputy_manager_id 分管副总用户id|yes
     * @param int $manager_id 总经理id|no|实际积分时需要
     * @return int id 返回id
     * @request /check/applyPoints
     */
    public function applyPoints()
    {
        $post = $_POST;
        //TODO 权限
        if (!in_array($post['type'], [0, 1])) {
            return $this->jsonFail('积分类型错误');
        }
        if ($post['deputy_manager_id'] == 0) {
            return $this->jsonFail('请选择分管副总');
        }
        if ($post['type'] == 1 && $post['manager_id'] == 0) {
            return $this->jsonFail('请选择总经理');
        }
        if ($post['points'] == 0) {
            return $this->jsonFail('申请积分数不能为0');
        }
        //审核用户
        $checkUsers = [
            ['user_id' => $post['deputy_manager_id'], 'user_role_name' => '分管副总'],
            ['user_id' => $post['manager_id'], 'user_role_name' => '总经理'],
        ];
        $service = Check::instance();
        $returnId = $service->applyPointsCheck($post['project_id'], $post['type'], $post['points'], $checkUsers);
        if (!$returnId) {
            return $this->jsonFail($service->error);
        }
        return $this->jsonSuccess(['id' => $returnId]);
    }

    /**
     * ！项目积分审核页面
     */
    public function checkPoints()
    {

    }

    /**
     * ！项目积分审核接口
     */
    public function confirmPoints()
    {

    }

    /**
     * 项目附件申请接口
     * @param int $project_id 项目附件id|yes
     * @param int $type 附件类型|yes|10-项目会议纪要，11-项目合同文本，12-项目图片，13-项目图纸，14-url,15-其他
     * @param string $name 附件名称|yes
     * @param array $attachments 上传附件返回的id数组|yes
     * @return int id 返回id
     * @request /check/applyAttachment
     */
    public function applyAttachment()
    {
        $post = $_POST;
        //TODO 权限
        if (!in_array($post['type'], [10, 11, 12, 13, 14, 15])) {
            return $this->jsonFail('资源类型错误');
        }
        if (empty($post['name'])) {
            return $this->jsonFail('资源名称不能为空');
        }
        if (empty($post['attachments']) || !is_array($post['attachments'])) {
            return $this->jsonFail('您还没有上传资源');
        }
        //审核人-项目负责人
        $managerId = M('projectMember')
            ->where(['project_id' => $post['project_id'], 'user_type' => 2])
            ->getField('user_id');
        if (empty($managerId)) {
            return $this->jsonFail('获取项目信息失败');
        }
        $checkUsers = [
            ['user_id' => $managerId, 'user_role_name' => '项目负责人'],
        ];
        $service = Check::instance();
        $returnId = $service->applyAttachmentCheck($post['project_id'], $post['type'], $post['name'], $post['attachments'], $checkUsers);
        if (!$returnId) {
            return $this->jsonFail($service->error);
        }
        return $this->jsonSuccess(['id' => $returnId]);
    }

    /**
     * !项目附件审核页面
     * @param int $id 审核表id
     */
    public function checkAttachment($id)
    {

    }

    /**
     * !项目附件审核接口
     * @desc ajax-post
     * @param int $check_flow_id 审核流程id|yes
     * @param int $type 确认结果|yes|1-确认，2-申诉
     * @param string $reason 申诉原因|no|申诉时需要填写
     * @return int id 返回id
     */
    public function confirmAttachment()
    {

    }
}